package com.sleepapp.controller.module;


import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.sleepapp.annotation.SaAdminCheckLogin;
import com.sleepapp.annotation.SaUserCheckLogin;
import com.sleepapp.entity.Product;
import com.sleepapp.service.ProductService;
import com.sleepapp.utils.AjaxResult;
import com.sleepapp.vo.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;

/**
 * <p>
 * 商品表 前端控制器
 * </p>
 *
 * @author 
 * @since 2025-03-13
 */
@RestController
@RequestMapping("/product")
public class ProductController {

    @Autowired
    private ProductService productService;


    /**
     * 获取所有商品
     * @param pageQueryParamVo 分页参数
     * @folder 商品
     */
    @GetMapping("/admin/getAll")
    @SaAdminCheckLogin
    public AjaxResult<PageQueryInfo<List<ProductQueryAllVo>>> getAll(@ModelAttribute @Valid PageQueryParamVo pageQueryParamVo) {
        return AjaxResult.success(productService.getAll(pageQueryParamVo));
    }

    /**
     * 添加商品
     * @param productAddVo 商品参数
     * @folder 商品
     */
    @PostMapping("/admin/add")
    @SaAdminCheckLogin
    public AjaxResult<Void> add(@RequestBody @Valid ProductAddVo productAddVo) {
        Product product = BeanUtil.copyProperties(productAddVo, Product.class);
        return productService.save(product) ? AjaxResult.success() : AjaxResult.fail();
    }

    /**
     * 删除商品
     * @param id 商品id
     * @folder 商品
     */
    @DeleteMapping("/admin/delete/{id}")
    @SaAdminCheckLogin
    public AjaxResult<Void> delete(@PathVariable Long id) {
        return productService.removeById(id) ? AjaxResult.success() : AjaxResult.fail();
    }

    /**
     * 修改商品
     * @param productUpdateVo 商品参数
     * @folder 商品
     */
    @PutMapping("/admin/update")
    @SaAdminCheckLogin
    public AjaxResult<Void> update(@RequestBody @Valid ProductUpdateVo productUpdateVo) {
        Product product = BeanUtil.copyProperties(productUpdateVo, Product.class, "");
        return productService.updateById(product) ? AjaxResult.success() : AjaxResult.fail();
    }

    /**
     * 获取所有商品-用户
     * @folder 商品
     */
    @GetMapping("/getAllByUser")
    @SaUserCheckLogin
    public AjaxResult<PageQueryInfo<List<UProductQueryAllVo>>> getAllByUser(@ModelAttribute @Valid PageQueryParamVo pageQueryParamVo) {
        return AjaxResult.success(productService.getAllByUser(pageQueryParamVo));
    }


}

